﻿Option Explicit On
Option Strict On
Imports System.Data
Imports System.Data.OleDb

'Documentación XML
''' <summary>
''' Esta clase gestionará todas las operaciones 
''' que vayamos a realizar sobre la base de datos.
''' </summary>
''' <author> Jerón Fernández Caballero Rico</author>
''' <author> Daniel Morato Baudi</author>

Public Class BaseDatos

    'Atributos
    Private Conexion As OleDbConnection
    Private Orden As OleDbCommand
    Private Lector As OleDbDataReader

    ' Métodos
    ''' <param name="Consulta">(String) Instrucción SELECT para leer en la base de datos.</param>
    ''' <returns>(OleDbDataReader) Devuelve un objeto DataReader con los datos leídos.</returns>
    Public Function Leer(ByVal Consulta As String) As OleDbDataReader

        If Consulta.IndexOf("SELECT") = 0 Then

            IniciarConexion()
            Orden = New OleDbCommand(Consulta, Conexion)

        Else
            MsgBox("La instrucción introducida no es " & _
                   "una instrucción SELECT válida.")
        End If

        Try
            Lector = Orden.ExecuteReader()

        Catch ErrorBD As OleDbException

            MsgBox("Error: " + ErrorBD.Message)

        End Try
        Return Lector

    End Function

    ''' <param name="Insercion">(String) Instrucción INSERT para añadir datos en la base de datos.</param>
    ''' <returns>(String) Devuelve un mensaje para saber el estado de la consulta.</returns>
    Public Function Insertar(ByVal Insercion As String) As String

        If Insercion.IndexOf("INSERT") = 0 Then

            IniciarConexion()
            Orden = New OleDbCommand(Insercion, Conexion)

        Else
            Return "La instrucción introducida no es " & _
                   "una instrucción INSERT válida."
        End If

        Try
            Orden = New OleDbCommand(Insercion, Conexion)
            If (Orden.ExecuteNonQuery() < 1) Then
                Return "No se ha podido insertar."
            Else
                Return "Datos añadidos correctamente."
            End If

        Catch ErrorBD As OleDbException

            Return "Error: " + ErrorBD.Message

        Finally
            CerrarConexion()

        End Try
    End Function

    ''' <param name="Editado">(String) Instrucción UPDATE para modificar datos en la base de datos.</param>
    Public Sub Modificar(ByVal Editado As String)

        If Editado.IndexOf("UPDATE") = 0 Then

            IniciarConexion()
            Orden = New OleDbCommand(Editado, Conexion)

        Else
            MsgBox("La instrucción introducida no es" & _
                   "una instrucción UPDATE válida.")
        End If

        Try

            Orden = New OleDbCommand(Editado, Conexion)
            If (Orden.ExecuteNonQuery() < 1) Then
                MsgBox("No se ha podido editar.")
                FormEntrada.tsp_lb_Mensajes.Text = "No se ha podido editar."
                FormEntrada.tsp_lb_Mensajes.Visible = True
            Else
                MsgBox("Los datos han sido editados.")
                FormEntrada.tsp_lb_Mensajes.Text = "Los datos han sido editados."
                FormEntrada.tsp_lb_Mensajes.Visible = True
            End If


        Catch ErrorBD As OleDbException

            MsgBox("Error: " + ErrorBD.Message)

        Finally
            CerrarConexion()

        End Try
    End Sub

    ''' <param name="Borrado">(String) Instrucción DELETE para borrar en la base de datos.</param>
    Public Sub Borrar(ByVal Borrado As String)

        If Borrado.IndexOf("DELETE") = 0 Then

            IniciarConexion()
            Orden = New OleDbCommand(Borrado, Conexion)

        Else
            MsgBox("La instrucción introducida no es " & _
                   "una instrucción DELETE válida.")
        End If

        Try

            Orden = New OleDbCommand(Borrado, Conexion)
            If (Orden.ExecuteNonQuery() < 1) Then
                MsgBox("No se ha podido borrar.")
                FormEntrada.tsp_lb_Mensajes.Text = "No se ha podido borrar."
                FormEntrada.tsp_lb_Mensajes.Visible = True
            Else
                MsgBox("Se han borrado los datos correctamente.")
                FormEntrada.tsp_lb_Mensajes.Text = "Se han borrado los datos correctamente."
                FormEntrada.tsp_lb_Mensajes.Visible = True
            End If

        Catch ErrorBD As OleDbException

            MsgBox("Error: " + ErrorBD.Message)

        Finally
            CerrarConexion()

        End Try
    End Sub

    ' Método para iniciar la conexion con la base de datos
    Public Sub IniciarConexion()

        Try
            Conexion = New OleDbConnection(
                "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                "Data Source=|DataDirectory|\campeonato.accdb;" & _
                "Persist Security Info=True")

            Conexion.Open()

        Catch ex As OleDbException

            MsgBox("Error: " + ex.Message)
            CerrarConexion()

        End Try

    End Sub

    ' Método para cerrar la conexion con la base de datos
    Public Sub CerrarConexion()
        If Not Conexion Is Nothing Then
            Conexion.Close()
        End If
        If Not Lector Is Nothing Then
            Lector.Close()
        End If
    End Sub
    
End Class